package com.li.sparksql

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object DataFrameOp {
  def main(args: Array[String]): Unit = {
    val sc: SparkSession = getSparkSession
    //读取json文件 获取dataFrame
    val stuDf = sc.read.json("/Users/lijiacen/Downloads/chealse.json")
    //打印schema信息
    stuDf.printSchema();

    //默认显示所有，可以通过参数控制显示多少条
    stuDf.show(2)

    //查询数据中指定字段
    stuDf.select("name", "age").show()

    //使用select时候可以对数据做一些操作，需要添加隐式转换函数，否则报错
    import sc.implicits._
    stuDf.select($"name", $"age" + 1).show()

    //过滤也要添加转换函数 where底层就是调用filter
    stuDf.filter($"age" > 10).show()
    stuDf.where($"age" > 10).show()

    //分组求和
    stuDf.groupBy("sex").count().show()

    sc.stop();
  }


  private def getSparkSession = {
    val conf = new SparkConf();
    conf.setMaster("local");
    val session = SparkSession.builder()
      .appName("DataFrameOp")
      .config(conf)
      .getOrCreate()
    session
  }
}
